﻿// Расширение monitor вложенным пространством имен gmap.    
monitor.gmap = monitor.gmap || {};
// Расширение monitor.gmap вложенным пространством имен list.  
monitor.gmap.list = monitor.gmap.list || {};

// Для работы со статическими методами необходимо 
// напрямую установить данный объект. 
monitor.gmap.list.MapMgr = null; // диспетчер карты

/* ----- CarList -----*/
(function() {

    // Конструктор класса CarList
    //   
    monitor.gmap.list.CarList = function () {

    };
    
    // Статические методы класса CarList
    //
    // Добавление машины на карту.
    monitor.gmap.list.CarList.add = function (carId, areaId) {
        if (monitor.gmap.list.MapMgr != null) {
            if (!monitor.gmap.list.MapMgr.isCarAdded(carId)) {
                // Запрос на получение данных о машине.
                $.ajax({
                    url: '/data/CarsPosition/',
                    data: 'listOfId=' + carId, // указывается конкретная машина
                    cache: true,
                    type: 'GET',
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {
                        var args = null;
                        if (data) {
                            args = {};
                            args.name = data[0].CarName;
                            args.comment = data[0].CarComment;
                            if (data[0].CarCoords) {
                                args.latlng = { x: data[0].CarCoords.X, y: data[0].CarCoords.Y };
                                args.dateReg = new Date(data[0].CarCoords.Date + 'Z');
                            }
                        }
                        monitor.gmap.list.MapMgr.addCar(carId, args);
                        monitor.gmap.list.MapMgr.showCar(carId, areaId);
                    }
                });
                
            } else {
                monitor.gmap.list.MapMgr.showCar(carId, areaId);
            }
        }
    };
    // Удаление машины с карты.
    monitor.gmap.list.CarList.remove = function (carId, areaId) {
        if (monitor.gmap.list.MapMgr != null) {
            monitor.gmap.list.MapMgr.hideCar(carId);
        }
    };

})();

/* ----- AreaList -----*/
(function () {

    // Конструктор класса AreaList
    //   
    monitor.gmap.list.AreaList = function () {

    };

    // Статические методы класса AreaList
    //
    // Добавление зоны и всех ее машин на карту.
    monitor.gmap.list.AreaList.add = function (areaId) {
        if (monitor.gmap.list.MapMgr != null) {
            $.ajax({
                url: '/data/Areas/' + areaId,
                cashe: true,
                type: 'GET',
                contentType: 'application/json; charset=utf-8',
                success: function (areaInfo) {
                    var areaCoords = JSON.parse(areaInfo.AreaCoords);
                    var listOfCarId = JSON.parse(areaInfo.AreaCarsId);
                    monitor.gmap.list.MapMgr.addArea(areaId, areaCoords);
                    for (var i = 0; i < listOfCarId.length; i++) {
                        monitor.gmap.list.CarList.add(listOfCarId[i], areaId);
                    }
                }
            });
        }
    };
    // Удаление зоны и всех ее машин с карты.
    monitor.gmap.list.AreaList.remove = function (areaId) {
        if (monitor.gmap.list.MapMgr != null) {
            $.ajax({
                url: '/data/Areas/' + areaId,
                cashe: true,
                type: 'GET',
                contentType: 'application/json; charset=utf-8',
                success: function (areaInfo) {
                    var listOfCarId = JSON.parse(areaInfo.AreaCarsId);
                    for (var i = 0; i < listOfCarId.length; i++) {
                        monitor.gmap.list.CarList.remove(listOfCarId[i], areaId);
                    }
                    monitor.gmap.list.MapMgr.removeArea(areaId);
                }
            });
        }
    };

})();
    
  /*  



    var marker = new google.maps.Marker({
        //animation: google.maps.Animation.DROP,
        draggable: false
    });
    this.marker = marker;
    var self = this;
    google.maps.event.addListener(this.marker, 'click', function () {
        if (self.marker.info) {
            self.marker.info.open(self.mountMap, self.marker);
        }
        ;
    });

    function Car(data) {
        var checked = false;
        function init(data) {
            this.id = data.CarId;
            this.name = data.CarName;
            this.comment = data.CarComment;
            this.lat = data.CarCoords.X;
            this.lng = data.CarCoords.Y;
            this.date = data.CarCoords.Date;
        };
        init(data);
    };
    var list = [];

    init();
    function init() {
        
    }
    
};


// Прототип класса CarList
monitor.gmap.CarList.prototype = {
    createCarMarker: function (carId) {
        var marker = new monitor.gmap.Marker(mountMap);
        carMarkers[carId] = marker;
    },

    updateCarMarkers: function (data) {
        var count = data.length;
        for (var i = 0; i < count; i++) {
            carMarkers[data[i].id].updateMarker(pos, contentStr);
        }
    },
    showCar: function (carId, mapCentering) {
        mapCentering = mapCentering && (mapCentering || config.defaults.enableCentering);
        if (mapCentering) {
            carMarkers[carId].showCenterMarker();
        } else {
            carMarkers[carId].showMarker();
        }
        listOfId.push(carId);
    },
    hideCar: function (carId) {
        carMarkers[carId].hideMarker();
    },

    getArrayOfId: function () {
        /*var id = [];
        while (this.count--) {
            id[]
        };
        var b = [];
        for (var c in a) if (typeof a[c] == "object") b[b.length] = a[c];
        
        return b

        return array;/
    },
    hideMarker: function () {
        alert('hide ' + this.hd);
    },
    updateMarker: function () {
        
    },
    checkCar: function (id) {
        this._innerList.id.checkCar.apply(this);
        //this.checked = true;
    },
    uncheckCar: function () {
        this.checked = false;
    },
    getCar: function () {
        
    },
    addCar: function (data) {
        list.push(new Car(data));
    },
    removeCar: function () {

    },
};
*/